// Observer 观察者
import { def } from './utils.js'
import defineReactive from './defineReactive.js'
import { arrMethods } from './array.js'

export default class Observer {
  constructor (value) {
    //给value 定义__ob__ 对象，值为this，不可枚举
    def(value, '__ob__', this, false)
    if (Array.isArray(value)) {
      Object.setPrototypeOf(value, arrMethods)
    } else {
      this.walk(value)
    }
  }
  // 循环value进行数据监测
  walk (value) {
    for (const key in value) {
      defineReactive(value, key)
    }
  }
}